package cn.bouncyslime.algorithms.sort.insertSort;

import java.util.Arrays;

/**
 * 直接插入排序，时间复杂度为O(n^2)，但是却比简单选择排序和冒泡排序快很多
 * 作者： 张一卓
 * 时间： 2020/1/7 19:58
 */
public class StraightInsertSorting {
    public int[] sort(int[] array) {
        if (array == null) {
            return null;
        }
        int moveTimes = 0;
        int compareTimes = 0;
        for (int i = 1; i < array.length; i++) {
            int temp = array[i];
            int j = i - 1;
            // 将比 array[i] 大的元素向右移
            while (j >= 0 && array[j] > temp) {
                array[j + 1] = array[j];
                j--;
                moveTimes++;
                compareTimes++;
            }
            // 找到 array[i] 元素该插入的位置，存取该元素
            array[j + 1] = temp;
        }

        System.out.println(Arrays.toString(array));
        System.out.println("移动次数：" + moveTimes);
        System.out.println("比较次数：" + compareTimes);
        return array;
    }
}
